package issr.market.controller;

import issr.market.model.ErogazioneProdotto;
import issr.market.model.Prodotto;
import issr.market.services.ErogazioneProdottiService;
import issr.market.services.GestioneProdottiService;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.rest.HttpHeaders;

@Result(name = "login", type = "redirectAction", params = { "actionName",
		"login" })
public class BancoController extends AbstractController {

	private static final long serialVersionUID = -3179841867428557386L;
	private Logger logger = Logger.getLogger(BancoController.class);

	private static final String SEGNALA_SCADUTI = "segnalaScaduti";
	private static final String EROGA_PRODOTTI = "erogaProdotti";

	private String ricevutaBox;
	private Boolean checkStep = false;
	private String message = "";
	private String secondStep;

	private String[] idProdotto;
	private String[] idLotti;
	private String[] qProdotti;

	private List<ErogazioneProdotto> validiList;
	private List<ErogazioneProdotto> scadutiList;
	private List<ErogazioneProdotto> limitatiList;
	private List<Prodotto> esauritiList;

	@SuppressWarnings("unchecked")
	public HttpHeaders create() {
		if (SEGNALA_SCADUTI.equals(getActionToDo())) {

			logger.info("idLotti size: " + idLotti.length);
			message = GestioneProdottiService.segnalaScaduti(idLotti);

			logger.info(message);

		}
		if (EROGA_PRODOTTI.equals(getActionToDo())) {

			validiList = new ArrayList<ErogazioneProdotto>();
			scadutiList = new ArrayList<ErogazioneProdotto>();
			limitatiList = new ArrayList<ErogazioneProdotto>();
			esauritiList = new ArrayList<Prodotto>();

			boolean second = secondStep != null && secondStep.equals('Y') ? true
					: false;
			boolean ricevuta = ricevutaBox != null ? true : false;

			Map<String, List<? extends Object>> listMap = ErogazioneProdottiService
					.erogaProdotti(idProdotto, qProdotti, second, ricevuta,
							message);

			validiList = (List<ErogazioneProdotto>) listMap
					.get(ErogazioneProdottiService.VALIDI_LIST);
			scadutiList = (List<ErogazioneProdotto>) listMap
					.get(ErogazioneProdottiService.SCADUTI_LIST);
			limitatiList = (List<ErogazioneProdotto>) listMap
					.get(ErogazioneProdottiService.LIMITATI_LIST);
			esauritiList = (List<Prodotto>) listMap
					.get(ErogazioneProdottiService.ESAURITI_LIST);

			if (!limitatiList.isEmpty() || !esauritiList.isEmpty()
					|| !scadutiList.isEmpty()) {
				logger.info("Sono stati individuati alcuni importanti eventi nella gestione dell'erogazione prodotti");

				checkStep = true;

			}
		}

		return index();
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String[] getIdLotti() {
		return idLotti;
	}

	public void setIdLotti(String[] idLotti) {
		this.idLotti = idLotti;
	}

	public String getRicevutaBox() {
		return ricevutaBox;
	}

	public void setRicevutaBox(String ricevutaBox) {
		this.ricevutaBox = ricevutaBox;
	}

	public Boolean getCheckStep() {
		return checkStep;
	}

	public void setCheckStep(Boolean checkStep) {
		this.checkStep = checkStep;
	}

	public String[] getIdProdotto() {
		return idProdotto;
	}

	public void setIdProdotto(String[] idProdotto) {
		this.idProdotto = idProdotto;
	}

	public String[] getQProdotti() {
		return qProdotti;
	}

	public void setQProdotti(String[] qProdotti) {
		this.qProdotti = qProdotti;
	}

	public List<ErogazioneProdotto> getValidiList() {
		return validiList;
	}

	public void setValidiList(List<ErogazioneProdotto> validiList) {
		this.validiList = validiList;
	}

	public List<ErogazioneProdotto> getScadutiList() {
		return scadutiList;
	}

	public void setScadutiList(List<ErogazioneProdotto> scadutiList) {
		this.scadutiList = scadutiList;
	}

	public List<ErogazioneProdotto> getLimitatiList() {
		return limitatiList;
	}

	public void setLimitatiList(List<ErogazioneProdotto> limitatiList) {
		this.limitatiList = limitatiList;
	}

	public List<Prodotto> getEsauritiList() {
		return esauritiList;
	}

	public void setEsauritiList(List<Prodotto> esauritiList) {
		this.esauritiList = esauritiList;
	}

	public String getSecondStep() {
		return secondStep;
	}

	public void setSecondStep(String secondStep) {
		this.secondStep = secondStep;
	}

}
